home *** CD-ROM | disk | FTP | other *** search
- TITLE GSPPT - 320x200x16 mode support
- NAME GSPPT
-
-
- COMMENT $
-
- Name: GXSPPT
-
- Written and (c) by Dave Stampe 9/11/91
- Not for commercial use, so get permission
- before marketing code using this stuff!
- For private PD use only.
-
- $
-
- .MODEL large
- .CODE
-
- ;
- ; void vsync(); /* waits for vert. sync pulse */
- ;
- PUBLIC _vsync
-
- _vsync proc far
-
- push bp
- mov bp,sp
- mov dx,03DAh
- in al,dx ; test if 0
- test al,8
- je short @11@218
- @11@122:
- in al,dx
- nop
- test al,8 ; wait for 0
- jne short @11@122
- @11@218:
- in al,dx
- nop
- test al,8 ; wait for 1
- je short @11@218
- pop bp
- ret
-
- _vsync endp
-
- ;
- ; void setup_hdwe(int mode); /* sets up VGA for line, poly draw */
- ; /* modes are: 0=PUT, 1=OR, */
- ; /* 2=AND, 3=XOR */
- ; /* only PUT for X-mode */
-
- PUBLIC _setup_hdwe
-
- _setup_hdwe proc far
-
- push bp
- mov bp,sp
- mov dx,03CEH
- mov ax,00008h ; all display copy bits
- out dx,ax
-
- mov dx,03c4h ; prepare plane mask reg. for access
- mov ax,0f02h
- out dx,ax
- pop bp
- ret
-
- _setup_hdwe endp
-
- ;
- ; void reset_hdwe()
- ;
-
- PUBLIC _reset_hdwe
-
- _reset_hdwe proc far
-
- push bp
- mov bp,sp
- mov dx,03CEH
- mov ax,0FF08h ; all CPU data bits
- out dx,ax
-
- mov dx,03c4h ; prepare plane mask reg. for access
- mov ax,0f02h
- out dx,al
- pop bp
- ret
-
- _reset_hdwe endp
-
- ;
- ; int clr_page(int page, int color); /* clear page to color */
- ;
- ; /* returns 0 if OK, 1 if bad page */
-
- PUBLIC _clr_page
-
- _clr_page proc far
-
- push bp
- mov bp,sp
- dec sp
- dec sp
- push di
- cld
- mov cx,word ptr [bp+6]
- cmp cx,3 ; check for valid page
- jle short @14@74
- mov ax,65535
- jmp short @14@482
- @14@74:
- call far ptr _setup_hdwe ; reset to default VGA mode
- cld
- mov ax,0A000h
- mov es,ax
- mov bl,BYTE PTR [bp+8]
- mov bh,0ffh ; figure what entry to read
- mov al,es:[bx] ; read entry into latches
-
- mov ax,word ptr [bp+6]
- mov cx,16000
- mul cx
- mov di,ax
-
- rep stosb
- call far ptr _reset_hdwe
- xor ax,ax
- @14@482:
- pop di
- mov sp,bp
- pop bp
- ret
-
- _clr_page endp
-
- ;
- ; int copy_page(int source, int dest)
- ;
- ; /* returns 0 if OK, 1 if bad page */
-
- PUBLIC _copy_page
-
- _copy_page proc far
-
- push bp
- mov bp,sp
- sub sp,4
- push si
- push di
- cmp word ptr [bp+6],3
- jg short @15@74 ; check for valid page #'s
- cmp word ptr [bp+8],3
- jle short @15@98
- @15@74:
- mov ax,65535
- jmp short @15@506
- @15@98:
- call far ptr _setup_hdwe ; write VGA state
- push ds
- cld
- mov ax,0A000h
- mov es,ax
- mov ds,ax
- mov cx,16000
- mov ax,word ptr [bp+6] ; compute source address
- mul cx
- mov si,ax
- mov ax,word ptr [bp+8] ; compute dest. address
- mul cx
- mov di,ax
-
- rep movsb
-
- call far ptr _reset_hdwe
- pop ds
- xor ax,ax
- @15@506:
- pop di
- pop si
- mov sp,bp
- pop bp
- ret
-
- _copy_page endp
-
-
- ;
- ; void vga_reg(int reg) /* integer: lsby=reg(0=color), msby=value */
- ;
-
- PUBLIC _vga_reg
-
- _vga_reg proc far
-
- push bp
- mov bp,sp
- mov dx,03CEH
- mov ax,WORD PTR [bp+6]
- out dx,ax
- pop bp
- ret
-
- _vga_reg endp
-
-
-
- ;
- ; void load_color(int color) /* integer: loads latches with color */
- ;
-
- PUBLIC _load_color
-
- _load_color proc far
-
- push bp
- mov bp,sp
- mov ax,0a000h
- mov es,ax
- mov bl,BYTE PTR [bp+6]
- mov bh,0ffh ; figure what entry to read
- mov al,es:[bx] ; read entry into latches
- pop bp
- ret
-
- _load_color endp
-
-
- ;
- ; void _set_vmode(int mode) /* enters video mode thru BIOS */
- ; /* mode: clear if MSB not 0 */
- ; /* mode 14h = X-mode */
-
- PUBLIC _set_vmode
-
- _set_vmode proc far
-
- push bp
- mov bp,sp
-
- mov ah,0
- mov al,BYTE PTR [bp+6]
- mov bl,al
- and bl,07fh
- cmp bl,14h
- jz setxmode
- int 10h
- pop bp
- ret
-
- setxmode:
- mov ah,0 ; set 256-color mode
- mov al,13h
- int 10h
-
- mov dx,03c4h ; convert to X-mode addressing
- mov ax,0604h ; chain mode off
- out dx,ax
-
- mov dx,03d4h
- mov ax,0014h ; doubleword off
- out dx,ax
- mov ax,0E317h ; byte mode on
- out dx,ax
-
- call far ptr _reset_hdwe
-
- mov ax,WORD PTR[bp+6]
- test al,080h
- jnz dontclear
-
- mov ax,0f02h
- out dx,ax ; clear all planes at once
- mov ax,0a000h
- mov es,ax
- xor di,di
- mov cx,0ffffh
- xor ax,ax
- rep stosb
-
- mov di,0ff00h ; setup latch color table
- mov cx,100h
- xor al,al
- ctloop: stosb
- inc al
- loop ctloop
-
- dontclear:
- pop bp
- ret
-
- _set_vmode endp
-
-
- ;
- ; void _set_vpage(int page) /* sets video page */
- ;
-
- PUBLIC _set_vpage
-
- _set_vpage proc far
-
- push bp
- mov bp,sp
- mov ah,5
- mov al,BYTE PTR [bp+6]
- xor ah,ah
- cmp al,4 ; check page #
- jae badpage
-
- mov bx,16000
- mul bx
-
- mov bh,ah
- mov ah,al ; page # -> address
- mov al,0dh
- mov bl,0ch
-
- mov dx,03d4h ; set CRTC address
- out dx,ax
- mov ax,bx
- out dx,ax
- badpage:
- pop bp
- ret
-
- _set_vpage endp
-
-
- end
-
-